<?php
/**     
  *
  * Copyright (c) 2009, Persistent Systems Limited
  *
  * Redistribution and use, with or without modification, are permitted 
  *  provided that the following  conditions are met:
  *   - Redistributions of source code must retain the above copyright notice, 
  *     this list of conditions and the following disclaimer.
  *   - Neither the name of Persistent Systems Limited nor the names of its contributors 
  *     may be used to endorse or promote products derived from this software 
  *     without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
  
/**
  *
  * This file contains the definition of ResourceBox Class
  */
  
/**
  * The ResourceBox Class.
  * Used to hold a entity instance and its related information in the context
  */

class ResourceBox extends Entity
{   
    
   /**
    * This variable will hold the uri to the resource if resource is existing
    * ex: http://server/service.svc/Customer(CustomerID='CHA25')
    * else null (just added)
    */
    public $EditLink;
    
   /**
    * This variable will hold the relative uri of the resource
    * If the resource is just added in the context then this variable 
    * contains EntityName
    * ex: Customers
    * If the resource is already existing then this variable holds the unique id
    * in the data service
    * ex: Customers(CustomerID='CHA12')
    */
    public $Identity;
    
   /**
    * Number of related links. ie number of elements in the Bindings dictionary
    * in which resource participate as SourceObject
    */ 
    public $RelatedLinkCount;
    
    /**
     * The entity instance
     */
    protected $_resource;    
    
    /**
     * @Returns <Object>
     * Get method for the entity instance
     */
    public function getResource()
    {		
        return $this->_resource;
    }
     
    /**
     *@param <uri> $identity
     *@param <string> $editLink
     *@param <Object> $resource
     * Constructs a ResourceBox instance
     */          
    public function ResourceBox($identity, $editLink, $resource)
    {
        $this->Identity = $identity;
        $this->EditLink = $editLink;
        $this->_resource = $resource;
    }
    
    /**
     * @Returns TRUE always
     */
    public function IsResource()
    {
        return TRUE;
    }    
    
    /**
     *@param <uri> $baseUriWithSlash    
     *@Returns <uri>
     *Constructs a uri points to the actual entity 
     *instance in the data service. 
     *If resource is just added to context this this will point to the entity
     */  
    public function GetResourceUri($baseUriWithSlash)
    {
        return $baseUriWithSlash . $this->EditLink;
    }
    
    /**
     *@param <RelatedEnd> $related   
     *@Return <bool>
     *Check current resource is participating in the binding represented by
     *$related
     */
    public function IsRelatedEntity($related)
    {
        if ($this->_resource->getObjectID() == $related->GetSourceResource()->getObjectID())
        {
            return TRUE;
        }
        return FALSE;
    }
}
?>